#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>


#define ERROR_EXIT(m) \
    do{ \
        perror(m); \
        exit(EXIT_FAILURE); \
    }while(0)

// EXIT_FAILURE  是系统自己定义的宏，用于表示错误返回

int main()
{
    int pipefd[2];
    if(pipe(pipefd)==-1)     // 创建管道
    {
        ERROR_EXIT("pipe error");
        
    }
    pid_t pid=fork();    // 创建管道之后创建子进程
    if(pid==-1) ERROR_EXIT("fork error");
    //开始关闭多余fd，本次实现为子向父通信，所以关闭子的读，父的写
    if(pid==0){
        //子
        close(pipefd[0]);
        write(pipefd[1],"Hello",5);
        close(pipefd[1]);
        exit(EXIT_SUCCESS);
    }
    //父
    close(pipefd[1]);
    char buff[10]={0};
    read(pipefd[0],buff,10);
    printf("buff= %s\n",buff);
    return 0;
}


